from globle import envs
from crewai import Agent,LLM
import datetime

# CrewAI
llm = LLM(
        model="openai/deepseek-chat",  # 注意前面加openai
        base_url="https://api.deepseek.com/v1",
        temperature=0.1,
        max_tokens=256,
    )


from crewai.tools import BaseTool # 导入base_tool
from pydantic import BaseModel,Field # 导入pydantic定义参数描述

# 方式1: 继承basetool
class AddToolArgs(BaseModel): # 定义参数描述
    a: str = Field(description="第一个加数")
    b: str = Field(description="第二个加数")

class add_numbers(BaseTool):
    name: str  = "add_numbers"
    description: str = "执行两个数的加法运算"
    args_schema : BaseModel = AddToolArgs # 申明参数描述
    def _run(self, a, b):
        print("正在执行加法运算...")
        return a + b


from crewai.tools import tool
# 方式2：用tool装饰器
@ tool
def current_time():
    """返回当前时间的工具"""
    return datetime.datetime.now()
'''
中间那行灰字是tool的描述，不可省略。
装饰器的方法无法定义参数描述，但LLM会根据参数名得到参数。
'''


agent = Agent(
    role="助手",
    goal="与用户聊天",
    backstory="友善的助手",
    llm = llm,
    tools=[add_numbers(),current_time], #注意如果是继承BaseTool,则需要加()实例化

)

r = agent.kickoff('3+2等于多少')
print(r)
